Я всех приветствую!
Если вы вдруг рассматриваете себя на такую прекрасную роль в мире IT как Аналитик (любой, от Бизнес и Продуктового до Аналитика Данных), то для работы вам потребуется такой язык как SQL. существует много разных подвидов, называемых СУБД - они отличаются друг от друга не много чем, но некоторый функционал в одном месте убран, в другом добавлен, поэтому знать нужно всё.
Сегодня же мы быстренько разберём, что из себя представляет часть по SQL для отбора кандидатов на стажировку в такую крупную фирму как Tinkoff.
Перед началом только напомню, что потренироваться самостоятельно в знаниях SQL, в написании запросов на разных СУБД можно на сайте https://sql-ex.ru/
Ну а с вами, как всегда, Господин Сергей, специально для канала ТУЧ
Inner Join используется именно для нахождения совпадающий значений в обоих таблицахUnique существует, и скорее всего ближе всего подходит чем другие ответыВ интернете нашел за 20 секунд такую вот таблицу:
len(a)*len(b)=100*between), а просто из списка значенияid=2,3 нет Иван-а в названии. а написание Like и Not Like можно прочитать на https://sql-ex.ru/ , сам помню читал с удовольствием их теоретический материал.Мне нравится создавать временные таблицы на сайте https://sqliteonline.com/
Вот Примеры кодов и их запуски на сайте:
CREATE TABLE Staff
(
staff_id INTEGER,
name str,
salary INTEGER,
email str,
birthday str,
jobtitle_id INTEGER
);
CREATE TABLE Jobtitles
(
jobtitle_id INTEGER,
name str
);
INSERT INTO Staff (staff_id, name,salary,email,birthday,jobtitle_id) VALUES (1, 'Сергей',100,'test@mail.ru','01.05.2001',3);
INSERT INTO Staff (staff_id, name,salary,email,birthday,jobtitle_id) VALUES (2, 'Андрей',200,'gog@mail.ru','05.10.2004',4);
INSERT INTO Staff (staff_id, name,salary,email,birthday,jobtitle_id) VALUES (3, 'Гоша',400,'test@mail.ru','10.05.2002',2);
INSERT INTO Staff (staff_id, name,salary,email,birthday,jobtitle_id) VALUES (4, 'Вася',500,'tyu@mail.ru','21.02.2002',3);
INSERT INTO Staff (staff_id, name,salary,email,birthday,jobtitle_id) VALUES (5, 'Иван',200,'tyu@mail.ru','01.08.2001',1);
INSERT INTO Staff (staff_id, name,salary,email,birthday,jobtitle_id) VALUES (6, 'Иван',150,'sdfh@mail.ru','01.05.2001',5);
INSERT INTO Jobtitles (jobtitle_id,name) VALUES (1,'Админ');
INSERT INTO Jobtitles (jobtitle_id,name) VALUES (2,'Прогер');
INSERT INTO Jobtitles (jobtitle_id,name) VALUES (3,'Уборщица');
INSERT INTO Jobtitles (jobtitle_id,name) VALUES (4,'Охранник');
INSERT INTO Jobtitles (jobtitle_id,name) VALUES (5,'Пекарь');
INSERT INTO Jobtitles (jobtitle_id,name) VALUES (6,'Управляющий');
Я решил написать все запросы через ;, в нормальных редакторах они будут нормально отображаться как отдельные окна. Думаю, вам будем лучше, если вы самостоятельно изучите как работает каждая из функций, которую я использовал (но скажу по секрету, разобрав полностью, а главное без моих подсказок все эти 3 запроса, вы выучите 70% всего SQL)
SELECT *
FROM Staff
WHERE email in (SELECT email
FROM (select email, count(*) as doubles
from Staff
GROUP BY email) AS t1
WHERE doubles<>1)
ORDER by email,staff_id ASC ;
SELECT staff_id,name, strftime('%Y', 'now') - strftime('%Y', birthdate) - (strftime('%m-%d', 'now') < strftime('%m-%d', birthdate)) AS age
FROM (SELECT *,date(substr(birthday,7,4) || '-' || substr(birthday,4,2) || '-' || substr(birthday,4,2)) AS birthdate
from Staff) as b1 ;
SELECT j.jobtitle_id,j.name,s.salary
from Staff s
JOIN Jobtitles j
ON j.jobtitle_id=s.jobtitle_id
WHERE s.salary<>(SELECT MAX(salary) from Staff)
ORDER by salary DESC
LIMIT 1
Результаты прогона по первой задаче:
Результаты прогона по второй задаче:
Результаты прогона по третьей задаче:
Теперь сохраняем это в g-доках и присылаем им ссылку на файл.)
Буквально минутное дело - решить блок с SQL в Tinkoff.